package lembrete.core.backbeans;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import lembrete.core.beans.Entrada;
import lembrete.core.beans.Grupo;
import lembrete.core.beans.Usuario;
import lembrete.core.exceptions.ExcecaoBD;

public class SistemaHandler extends SuperHandler {
	
	Usuario user;
	String emailUsuario;
	ArrayList<Grupo> gruposDousuario;
	Grupo grupo;
	String emailParaCompartilhar;
	String aceitaCompartilhar;
	private String[] itens;
	private ArrayList<SelectItem> selectItens;
	
	public String[] getItens() {
		return itens;
	}

	public void setItens(String[] itens) {
		this.itens = itens;
	}

	public ArrayList<SelectItem> getSelectItens() {
		return selectItens;
	}

	public void setSelectItens(ArrayList<SelectItem> selectItens) {
		this.selectItens = selectItens;
	}

	public void setGruposDousuario(ArrayList<Grupo> gruposDousuario) {
		this.gruposDousuario = gruposDousuario;
	}

	public String getEmailParaCompartilhar() {
		return emailParaCompartilhar;
	}

	public void setEmailParaCompartilhar(String emailParaCompartilhar) {
		this.emailParaCompartilhar = emailParaCompartilhar;
	}
	
	public Grupo getGrupo() {
		return grupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public SistemaHandler() throws FileNotFoundException, ExcecaoBD {
		super();
		setUser((Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
		setGrupo((Grupo)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("grupo"));
		setGruposDoUsuario(facade.getGruposDoUsuario(getEmailUsuario()));
		this.selectItens = new ArrayList<SelectItem>();
		setSelectItens(toSelectItem());
		
	}

	private ArrayList<SelectItem> toSelectItem() {
		ArrayList<Usuario> usuarios = facade.getUsuarios() ;
		for (int i=0; i< usuarios.size(); i++)
			if (usuarios.get(i).getEmail().equals(user.getEmail()))
				usuarios.remove(i);
		if (getGrupo()!= null){
			for (int i=0; i< usuarios.size(); i++)
				if (getGrupo().usuarioEhCadastrado(usuarios.get(i).getEmail()))
					usuarios.remove(i);
		}
		ArrayList<SelectItem> selectItems = new ArrayList<SelectItem>();
		for(int i=0;i<usuarios.size();i++){
			selectItems.add(new SelectItem(usuarios.get(i).toString()));
		}
		return selectItems;
	}
	
	public String compartilharGrupo(){
		List<String> list = new ArrayList<String>();;
		for (int i=0; i< itens.length; i++){
			String line = itens[i];
			String [] tokens = line.split(" ");
			list.add(tokens[tokens.length-1]);
		}
		
		try {
			facade.compartilharGrupo2(getUser().getEmail(), String.valueOf(getGrupo().getIdGrupo()), list);
			return Web_Util.OK;
		} catch (Exception e) {
			return Web_Util.FAIL;
		}
	}

	public String logout(){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
		return Web_Util.LOGOUT;
	
	}

	public Usuario getUser() {
		return user;
	}

	public void setUser(Usuario user) {
		this.user = user;
	}

	public String getEmailUsuario() {
		return user.getEmail();
	}

	public void setEmailUsuario(String nomeUsuario) {
		this.emailUsuario = user.getEmail();
	}

	public ArrayList<Grupo> getGruposDousuario() {
		return gruposDousuario;
	}

	public void setGruposDoUsuario(ArrayList<Grupo> gruposDousuario) throws ExcecaoBD {
		this.gruposDousuario = gruposDousuario;
	}
	
	public String getAceitaCompartilhar() {
		return aceitaCompartilhar;
	}

	public void setAceitaCompartilhar(String aceitaCompartilhar) {
		this.aceitaCompartilhar = aceitaCompartilhar;
	}
	
	public void escolheGrupo(ActionEvent event){
		UIParameter val = (UIParameter) event.getComponent().findComponent("id");
		Long id = Long.valueOf(val.getValue().toString());
		ArrayList<Grupo> grupos = facade.getSistema().getGrupos();
		for (Grupo g: grupos){
			if (g.getIdGrupo().equals(id)){
				System.out.println("ACHOU!!! -->> "+ g.getNome());
				this.grupo = g;
				FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("grupo", g);
				break;
			}
		}
	}
	
	public void aceitaCompartilharGrupo(ActionEvent event){
		UIParameter val = (UIParameter) event.getComponent().findComponent("id");
		String descricao = String.valueOf(val.getValue().toString());
		try {
			Long idGrupo = facade.getIdGrupoPorMsg(user.getEmail(),descricao);
			facade.confirmarParticipacaoCompartilhamento(user.getEmail(), String.valueOf(idGrupo));
			facade.removeMsg(user.getEmail(),descricao);
			System.out.println("bla");
			//return Web_Util.OK;
		} catch (Exception e) {
			//return Web_Util.FAIL;
		}
	}
	
	

}
